package com.hzncc.flowable_diboot.excel.model;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.lang.Double;
import java.math.BigDecimal;
import java.util.List;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import com.diboot.core.data.copy.Accept;
import com.diboot.core.util.D;
import com.diboot.core.util.V;
import com.diboot.file.excel.BaseExcelModel;
import com.diboot.file.excel.annotation.ExcelBindDict;
import com.diboot.file.excel.annotation.ExcelBindField;
import com.diboot.file.excel.annotation.ExcelOption;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.diboot.iam.entity.IamOrg;
import com.diboot.iam.entity.IamPosition;
import com.diboot.iam.entity.IamRole;
import com.diboot.iam.entity.IamUser;

import com.hzncc.flowable_diboot.entity.SapCustomer;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import jakarta.validation.constraints.NotNull;
import com.hzncc.flowable_diboot.entity.invoicemanage.InvoiceRegister;

/**
* 开票登记 导入model定义
*
* @author MyName
* @version 1.0
* @date 2024-11-14
 * Copyright © MyCorp
*/
@Getter
@Setter
@ExcelIgnoreUnannotated
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 1)
public class InvoiceRegisterImportModel extends BaseExcelModel {

    /**
     * 租户
     */
//    @ExcelProperty(value = "租户")
//    private String tenantIdLabel;
    @ExcelProperty(value = "ID")
    @ContentStyle(locked= BooleanEnum.TRUE,hidden = BooleanEnum.TRUE)
    private String id;

    /**
     * 是否登记
     */
    @ExcelProperty(value = "是否登记")
    private String registeredLabel;

    /**
     * SAP合同号
     */
    @ExcelProperty(value = "SAP合同号")
    private String sapContractCode;

    /**
     * 销售订单号
     */
    @ExcelProperty(value = "销售订单号")
    private String sapOrderCode;

    /**
     * 发货单号
     */
    @ExcelProperty(value = "交货号")
    private String deliveryCode;

    /**
     * 合同号
     */
    @ExcelProperty(value = "合同号")
    private String contractCode;

    /**
     * 合同签订单位
     */
    @ExcelBindField(entity = SapCustomer.class, field = "name", setIdField = "recipient") // （v3.5.0 支持逗号分割符1-n关联）
    @ExcelProperty(value = "合同签订单位")
    private String recipientLabel;

    @ExcelIgnore
    private String recipient;

    /**
     * 付款方式
     */
    @ExcelProperty(value = "付款方式")
//    @ExcelBindDict(type = "paymentMethod")
    private String payTypeLabel;

    /**
     * 合同付款提醒时间
     */
    @DateTimeFormat(D.FORMAT_DATE_Y4MD)
    @ExcelProperty(value = "合同付款提醒时间")
    private LocalDateTime planPaymentTime;

    /**
     * 开票日期
     */
    @DateTimeFormat(D.FORMAT_DATE_Y4MD)
    @ExcelProperty(value = "开票日期")
    private LocalDateTime invoiceDate;

    /**
     * 开票数量
     */
    @ExcelProperty(value = "开票数量")
    private Long invoiceCount;

    /**
     * 开票金额
     */
    @ExcelProperty(value = "开票金额")
    private BigDecimal invoiceAmount;

    /**
     * Sap发票号
     */
    @ExcelProperty(value = "Sap发票号")
    private String invoiceNo;

    /**
     * 领取人
     */
    @ExcelProperty(value = "领取人")
    @ExcelBindField(entity = IamUser.class, field = "userNum", setIdField = "claimant") // （v3.5.0 支持逗号分割符1-n关联）
    private String claimantNo;

    @ExcelIgnore
    private String claimant;

    /**
     * 邮寄人
     */
    @ExcelProperty(value = "邮寄人")
    @ExcelBindField(entity = IamUser.class, field = "userNum", setIdField = "sender") // （v3.5.0 支持逗号分割符1-n关联）
    private String senderNo;

    @ExcelIgnore
    private String sender;

    /**
     * 邮寄时间
     */
    @DateTimeFormat(D.FORMAT_DATE_Y4MD)
    @ExcelProperty(value = "邮寄时间")
    private LocalDateTime postDate;

    /**
     * 收件人
     */
    @ExcelProperty(value = "收件人")
    private String receiverLabel;

    /**
     * 联系电话
     */
    @ExcelProperty(value = "联系电话")
    private String contactPhone;

    /**
     * 运单号
     */
    @ExcelProperty(value = "运单号")
    private String billNo;


    /**
     * 邮寄地址
     */
    @ExcelProperty(value = "邮寄地址")
    private String postAddress;

    /**
     * 回执日期
     */
    @DateTimeFormat(D.FORMAT_DATE_Y4MD)
    @ExcelProperty(value = "回执日期")
    private LocalDateTime receiptDate;

    /**
     * 回执单类型
     */
    @ExcelProperty(value = "回执单类型")
    private String receiptTypeLabel;


    /**
     * 退票原因
     */
    @ExcelProperty(value = "退票原因")
    private String refundReason;

    /**
     * 开票类型
     */
    @ExcelProperty(value = "开票类型")
    private String invoiceCategoryLabel;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

//    /**
//    * 登记类型
//    */
//    @ExcelProperty(value = "登记类型")
//    private String registerType;
//
//    /**
//    * 引用开票登记号
//    */
//    @ExcelProperty(value = "引用开票登记号")
//    private String quoteInvoiceCode;
//
//    /**
//    * 引用非常规开票登记号
//    */
//    @ExcelProperty(value = "引用非常规开票登记号")
//    private String quoteAbnormalCode;
//
//    /**
//    * 引用冲销开票登记号
//    */
//    @ExcelProperty(value = "引用冲销开票登记号")
//    private String quoteReversalCode;
//
//    /**
//    * Sap凭证号
//    */
//    @ExcelProperty(value = "Sap凭证号")
//    private String sapCertCode;
//
//    /**
//    * Sap开票凭证日期
//    */
//    @DateTimeFormat(D.FORMAT_DATETIME_Y4MDHMS)
//    @ExcelProperty(value = "Sap开票凭证日期")
//    private LocalDateTime sapInvoiceCertTime;
//
//
//    /**
//    * 付款方
//    */
//    @ExcelProperty(value = "付款方")
//    private String payer;
//
//    /**
//    * 未收款
//    */
//    @ExcelProperty(value = "未收款")
//    private BigDecimal unpaidAmount;
//
//    /**
//    * 已收款
//    */
//    @ExcelProperty(value = "已收款")
//    private BigDecimal receivedAmount;
//
//    /**
//    * 是否收款完成
//    */
//    @Accept(name = "paymentCompletedLabel.label")
//    @ExcelProperty(value = "是否收款完成")
//    private String paymentCompletedLabel;
//    /**
//    * 发票类型
//    */
//    @Accept(name = "invoiceTypeLabel.label")
//    @ExcelProperty(value = "发票类型")
//    private String invoiceTypeLabel;
//
//    /**
//    * 附件
//    */
//    @ExcelProperty(value = "附件")
//    private String attachment;

}